package com.tmxk.api.days02.lf;

import com.tmxk.api.days01.lf.Dog;

import java.util.*;

public class HashMapDemo02 {
    public static void main(String[] args) {
        //ArrayList 和 LinkedList 默认容量初始值大小是10
        //HashMap 默认的容量初始大小是16
        //语法: Map<K,V> map = new HashMap<>();
        // K : key,键,是唯一的 -->Set接口下数据存储特点,唯一,无序
        // V : value,值,可重复 -->Collection接口下数据存储特点,不唯一,无序
        //HashMap是可以存储null值
        /*
             国家英文显示     国家中文显示
              Argentina       阿根廷
              Brazil          巴西
              Spain           西班牙
              Little Japan    小日本
              Korea           韩国
        */
        HashMap<String, Dog> hashMap = new HashMap<>();
        //添加数据的方法   hashMap集合对象名.put(key,value);
        //使用HashMap集合 添加5个 狗对象 ,迭代遍历 获取输出 狗狗名称 "--" 狗狗年龄
        hashMap.put("dog1",new Dog("饶嘉涛",2));
        hashMap.put("dog2",new Dog("汪汪",1));
        hashMap.put("dog3",new Dog("小黑",3));
        hashMap.put("dog4",new Dog("花花",6));
        hashMap.put("dog5",new Dog("张传玉",1));

        System.out.println("hashMap集合元素:" + hashMap);
        //使用四种方式  循环迭代遍历
        //通过hashMap的values进行遍历
        Collection<Dog> valuesDog = hashMap.values();
        for(Dog dog : valuesDog){
            System.out.println(dog.getName() + "--" + dog.getAge());
        }
        System.out.println();
        //通过hashMap的keySet进行遍历
        Set<String> keysDog = hashMap.keySet();
        for (String key : keysDog) {
            Dog dog = hashMap.get(key);
            System.out.println(dog.getName() + "--" + dog.getAge());
        }
        //迭代器遍历value
        Iterator<Dog> itDog = valuesDog.iterator();
        while(itDog.hasNext()){
            Dog dog = itDog.next();
            System.out.println(dog.getName() + "--" + dog.getAge());
        }
        //迭代遍历key
        Iterator<String> itKey = keysDog.iterator();
        while (itKey.hasNext()) {
            String key = itKey.next();
            Dog dog = hashMap.get(key);
            System.out.println(dog.getName() + "--" + dog.getAge());
        }
        //Lambda表达式遍历
        hashMap.keySet().forEach( key ->{
            Dog dog = hashMap.get(key);
            System.out.println(dog.getName() + "--" + dog.getAge());
        });

        //Map --> k,v组成
        //entrySet() 获取一个Map整体元素
        System.out.println("========== 输出hashMap集合元素  begin =================");
        System.out.println(hashMap);
        System.out.println("========== 输出hashMap集合元素  end =================");
        System.out.println("将hashMap集合作为一个整体输出");
        Set<Map.Entry<String,Dog>> setMap = hashMap.entrySet();
        setMap.forEach(map -> {
            System.out.println(map);
        });

        //获取"小白"是否存在hashMap集合元素中
        //containKey(): 获取map集合对象中key是否存在
        boolean isFindKey = hashMap.containsKey("小白");
        //containValue : 获取map集合对象中value是否存在
        boolean isFindVal = hashMap.containsValue("dog1");
        System.out.println("isFindKey:" + isFindKey + "\t isFindVal" + isFindVal);


        // 所有的集合都有一个清楚方法
        hashMap.clear();

        System.out.println("hashMap:" + hashMap);

    }
}
